From 45434d501cd97efeb7a667e8ef60aeae1da1d2f6 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Wed, 8 Mar 2023 14:01:10 -0500 Subject: [PATCH] Add GdkDragSurfaceSize This helper type will be used in the next commit for a new compute-size request on GdkDragSurface. It is analogous in spirit to GdkToplevelSize. --- gdk/gdk.h | 1 + gdk/gdkdragsurfacesize.c | 53 +++++++++++++++++++++++++++++++++ gdk/gdkdragsurfacesize.h | 42 ++++++++++++++++++++++++++ gdk/gdkdragsurfacesizeprivate.h | 29 ++++++++++++++++++ gdk/meson.build | 4 ++- 5 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 gdk/gdkdragsurfacesize.c create mode 100644 gdk/gdkdragsurfacesize.h create mode 100644 gdk/gdkdragsurfacesizeprivate.h diff --git a/gdk/gdk.h b/gdk/gdk.h index af43c7f175..4e8f31880d 100644 --- a/gdk/gdk.h +++ b/gdk/gdk.h @@ -45,6 +45,7 @@ #include #include #include +#include #include #include #include diff --git a/gdk/gdkdragsurfacesize.c b/gdk/gdkdragsurfacesize.c new file mode 100644 index 0000000000..354d3ecc1c --- /dev/null +++ b/gdk/gdkdragsurfacesize.c @@ -0,0 +1,53 @@ +/* GDK - The GIMP Drawing Kit + * Copyright (C) 2023 Red Hat + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + * + */ + +#include "config.h" + +#include "gdkdragsurfacesizeprivate.h" + +/** + * GdkDragSurfaceSize: + * + * The `GdkDragSurfaceSize` struct contains information that is useful + * to compute the size of a drag surface. + */ + +G_DEFINE_POINTER_TYPE (GdkDragSurfaceSize, gdk_drag_surface_size) + +void +gdk_drag_surface_size_init (GdkDragSurfaceSize *size) +{ + *size = (GdkDragSurfaceSize) { 0 }; +} + +/** + * gdk_drag_surface_size_set_size: + * @size: a `GdkDragSurfaceSize` + * @width: the width + * @height: the height + * + * Sets the size the drag surface prefers to be resized to. + */ +void +gdk_drag_surface_size_set_size (GdkDragSurfaceSize *size, + int width, + int height) +{ + size->width = width; + size->height = height; +} diff --git a/gdk/gdkdragsurfacesize.h b/gdk/gdkdragsurfacesize.h new file mode 100644 index 0000000000..28d23128be --- /dev/null +++ b/gdk/gdkdragsurfacesize.h @@ -0,0 +1,42 @@ +/* GDK - The GIMP Drawing Kit + * Copyright (C) 2023 Red Hat + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + * + */ + +#pragma once + +#if !defined(__GDK_H_INSIDE__) && !defined(GTK_COMPILATION) +#error "Only can be included directly." +#endif + +#include +#include + +G_BEGIN_DECLS + +typedef struct _GdkDragSurfaceSize GdkDragSurfaceSize; + +#define GDK_TYPE_DRAG_SURFACE_SIZE (gdk_drag_surface_size_get_type ()) + +GDK_AVAILABLE_IN_4_12 +GType gdk_drag_surface_size_get_type (void); + +GDK_AVAILABLE_IN_4_12 +void gdk_drag_surface_size_set_size (GdkDragSurfaceSize *size, + int width, + int height); + +G_END_DECLS diff --git a/gdk/gdkdragsurfacesizeprivate.h b/gdk/gdkdragsurfacesizeprivate.h new file mode 100644 index 0000000000..f777f473c8 --- /dev/null +++ b/gdk/gdkdragsurfacesizeprivate.h @@ -0,0 +1,29 @@ +/* GDK - The GIMP Drawing Kit + * Copyright (C) 2023 Red Hat + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see . + * + */ + +#pragma once + +#include "gdkdragsurfacesize.h" + +struct _GdkDragSurfaceSize +{ + int width; + int height; +}; + +void gdk_drag_surface_size_init (GdkDragSurfaceSize *size); diff --git a/gdk/meson.build b/gdk/meson.build index 3f97ac16fb..0e97663c08 100644 --- a/gdk/meson.build +++ b/gdk/meson.build @@ -16,6 +16,8 @@ gdk_public_sources = files([ 'gdkdisplay.c', 'gdkdisplaymanager.c', 'gdkdrag.c', + 'gdkdragsurface.c', + 'gdkdragsurfacesize.c', 'gdkdrawcontext.c', 'gdkdrop.c', 'gdkevents.c', @@ -52,7 +54,6 @@ gdk_public_sources = files([ 'gdktoplevellayout.c', 'gdktoplevelsize.c', 'gdktoplevel.c', - 'gdkdragsurface.c', 'loaders/gdkpng.c', 'loaders/gdktiff.c', 'loaders/gdkjpeg.c', @@ -76,6 +77,7 @@ gdk_public_headers = files([ 'gdkdisplay.h', 'gdkdisplaymanager.h', 'gdkdrag.h', + 'gdkdragsurfacesize.h', 'gdkdrawcontext.h', 'gdkdrop.h', 'gdkenums.h', -- 2.30.2